home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / phagexsources.lha / source / MorphCode.s < prev    next >
Text File  |  1994-07-09  |  9KB  |  540 lines

  1. ; This just uses to GFX piccys to morph between, it uses 20 frames, and
  2. ; you can change the FrameHeight...
  3.  
  4.     Opt    c-
  5.     Section    "Morpher Code",Code_c
  6.  
  7. Screen    = $b0000
  8. FrameHeight    = 128
  9. FrameSize    = (32*FrameHeight)
  10.  
  11.     IncDir    Df1:
  12.  
  13. Start    Movem.l    d0-d7/a0-a6,-(sp) 
  14.     Bsr    KillSys      
  15.     
  16.     Lea    CopperList(pc),a0 
  17.     Lea    HardWare,a6      
  18.     Move.l    a0,Cop1Lc(a6)      
  19.     Move.w    #$83c0,DMACon(a6)
  20.  
  21.     Move.l    FrameStart(pc),a0
  22.     Lea    FirstPiccy(pc),a1
  23.     Bsr    CopyPiccy
  24.     Move.l    FrameEnd(pc),a0
  25.     Lea    LastPiccy(pc),a1
  26.     Bsr    CopyPiccy
  27.     Move.l    FrameEnd(pc),a0
  28.     Add.l    #FrameSize,a0
  29.     Lea    LastPiccy(pc),a1
  30.     Bsr    CopyPiccy
  31.  
  32.     Lea    ColourZero+2(pc),a0
  33.     Move.w    #$f0f,(a0)    
  34.     Bsr    DoMorph
  35.     Lea    ColourZero+2(pc),a0
  36.     Move.w    #$000,(a0)
  37.  
  38. Loop    Bsr    Anim8
  39.     Btst    #6,$Bfe001      
  40.     Bne    Loop      
  41.         
  42.     Bsr    ReturnSys      
  43.     Movem.l    (sp)+,d0-d7/a0-a6 
  44.     Moveq    #0,d0      
  45.     Rts
  46.  
  47. Anim8    Lea    Screen,a0
  48.     Lea    CopperBPLS(pc),a1
  49.     Move.w    #21,d7
  50. AnimLoop    Move.l    a0,d1
  51.     Move.w    d1,6(a1)
  52.     Swap    d1
  53.     Move.w    d1,2(a1)
  54.     Bsr    VBL
  55.     Move.w    #$4000,d0
  56. Wait    Dbf    d0,Wait
  57.     Bsr    VBL
  58.     Btst    #6,$Bfe001
  59.     Beq    ExitAnim8
  60.     Add.l    #FrameSize,a0
  61.     Dbf    d7,AnimLoop
  62.         
  63.     Bsr    Pause
  64.     
  65.     Sub.l    #FrameSize,a0
  66.     
  67.     Move.w    #21,d7
  68. AnimLoop1    Move.l    a0,d1
  69.     Move.w    d1,6(a1)
  70.     Swap    d1
  71.     Move.w    d1,2(a1)
  72.     Bsr    VBL
  73.     Move.l    #$4000,d0
  74. Wait1    Dbf    d0,Wait1
  75.     Bsr    VBL
  76.     Btst    #6,$Bfe001
  77.     Beq    ExitAnim8
  78.     Sub.l    #FrameSize,a0
  79.     Dbf    d7,AnimLoop1
  80.     
  81.     Bsr    Pause
  82. ExitAnim8    Rts
  83.  
  84. Pause    Move.w    #10,d3
  85. WaitX1    Bsr    VBL
  86.     Move.w    #$2000,d0
  87. WaitX    Btst    #2,$Dff016
  88.     Beq    ExitPause
  89.     Btst    #6,$Bfe001
  90.     Beq    ExitAnim8
  91.     Dbf    d0,WaitX
  92.     Bsr    VBL
  93.     Dbf    d3,WaitX1
  94. ExitPause    Rts
  95.  
  96. VBL    Move.l    $Dff004,d0
  97.     And.l    #$1ff00,d0
  98.     Cmp.l    #$13000,d0
  99.     Bne    VBL
  100.     Rts
  101.  
  102. CopyPiccy    Move.w    #(FrameSize/4)-1,d0
  103. CopyPicLoop    Move.l    (a1)+,(a0)+
  104.     Dbf    d0,CopyPicLoop
  105.     Rts
  106.  
  107. DoMorph    Lea    MorphDatList(pc),a0
  108.     Move.l    #$ffff0000,$00(a0)
  109.     Move.l    #$ffff0000,$04(a0)
  110.     Move.l    #$ffff0000,$82(a0)
  111.     Move.l    #$ffff0000,$86(a0)
  112.  
  113.     Lea    FrameList(pc),a0
  114.     Move.w    #18,d0
  115. FrameCLear    Move.w    #(FrameSize/4)-1,d1
  116.     Move.l    (a0)+,a1
  117. GFXCLearLoop    Move.l    #0,(a1)+
  118.     Dbf    d1,GFXCLearLoop
  119.     Dbf    d0,FrameCLear
  120.  
  121.     Move.l    FrameStart(pc),a0
  122.     Move.l    FrameEnd(pc),a1
  123.     Lea    MorphDatList+4(pc),a2
  124.     Lea    MorphDatList+$86(pc),a3
  125.     Lea    MorphFlag(pc),a6
  126.     Or.b    #3,(a6)
  127. MorphFrame    Move.w    (a2)+,d0
  128.     Bge    DoFrameDat1
  129.     Bra    CalcFrame
  130.  
  131. GetFrame    Lea    MorphDatList(pc),a2
  132.     Bra    MorphFrame
  133.  
  134. DoFrameDat1    Move.w    (a2)+,d1
  135. DoFrameDat2    Move.w    (a3)+,d2
  136.     Bge    CreateFrame
  137.     Bra    CalcFrame1
  138.  
  139. GetHalfData    Lea    MorphDatList+$82(pc),a3
  140.     Bra    DoFrameDat2
  141.  
  142. CreateFrame    Move.w    (a3)+,d3
  143.     Move.l    a0,-(sp)
  144.     Lea    PosTabList(pc),a0
  145.     Sub.w    d0,d2
  146.     Sub.w    d1,d3
  147.     Lsl.w    #5,d2
  148.     Lsl.w    #5,d3
  149.     Lea    FrameList(pc),a4
  150.     Lea    MorphBitList(pc),a6
  151.     Move.w    #19,d7
  152.     Tst.w    d2
  153.     Bmi    MorphDat2
  154.     Tst.w    d3
  155.     Bmi    MorphDat1
  156. FrameAddrLoop    Move.l    (a4)+,a5
  157.     Add.b    0(a6,d2.w),d0
  158.     Add.b    0(a6,d3.w),d1
  159.     Move.w    d1,d4
  160.     Add.w    d4,d4
  161.     Move.w    0(a0,d4.w),d4
  162.     Move.w    d0,d5
  163.     Asr.w    #3,d5
  164.     Add.w    d5,d4
  165.     Moveq.l    #7,d5
  166.     Sub.w    d0,d5
  167.     Bset    d5,0(a5,d4.w)
  168.     Addq.w    #1,a6
  169.     Dbf    d7,FrameAddrLoop
  170.     Move.l    (sp)+,a0
  171.     Bra    MorphFrame
  172.  
  173. MorphDat1    Neg.w    d3
  174. DoMorphSeg1    Move.l    (a4)+,a5
  175.     Add.b    0(a6,d2.w),d0
  176.     Sub.b    0(a6,d3.w),d1
  177.     Move.w    d1,d4
  178.     Add.w    d4,d4
  179.     Move.w    0(a0,d4.w),d4
  180.     Move.w    d0,d5
  181.     Asr.w    #3,d5
  182.     Add.w    d5,d4
  183.     Moveq.l    #7,d5
  184.     Sub.w    d0,d5
  185.     Bset    d5,0(a5,d4.w)
  186.     Addq.w    #1,a6
  187.     Dbf    d7,DoMorphSeg1
  188.     Move.l    (sp)+,a0
  189.     Bra    MorphFrame
  190.  
  191. MorphDat2    Neg.w    d2
  192.     Tst.w    d3
  193.     Bmi    MorphDat3
  194. DoMorphSeg2    Move.l    (a4)+,a5
  195.     Sub.b    0(a6,d2.w),d0
  196.     Add.b    0(a6,d3.w),d1
  197.     Move.w    d1,d4
  198.     Add.w    d4,d4
  199.     Move.w    0(a0,d4.w),d4
  200.     Move.w    d0,d5
  201.     Asr.w    #3,d5
  202.     Add.w    d5,d4
  203.     Moveq.l    #7,d5
  204.     Sub.w    d0,d5
  205.     Bset    d5,0(a5,d4.w)
  206.     Addq.w    #1,a6
  207.     Dbf    d7,DoMorphSeg2
  208.     Move.l    (sp)+,a0
  209.     Bra    MorphFrame
  210.  
  211. MorphDat3    Neg.w    d3
  212. DoMorphSeg3    Move.l    (a4)+,a5
  213.     Sub.b    0(a6,d2.w),d0
  214.     Sub.b    0(a6,d3.w),d1
  215.     Move.w    d1,d4
  216.     Add.w    d4,d4
  217.     Move.w    0(a0,d4.w),d4
  218.     Move.w    d0,d5
  219.     Asr.w    #3,d5
  220.     Add.w    d5,d4
  221.     Moveq.l    #7,d5
  222.     Sub.w    d0,d5
  223.     Bset    d5,0(a5,d4.w)
  224.     Addq.w    #1,a6
  225.     Dbf    d7,DoMorphSeg3
  226.     Move.l    (sp)+,a0
  227.     Bra    MorphFrame
  228.  
  229. CalcFrame    Lea    MorphDatList(pc),a2
  230.     Move.w    (a2),d4
  231.     Move.w    2(a2),d5
  232.     And.w    #$ffe0,d4
  233. DrawData    Add.w    #$20,d4
  234.     Cmp.w    #$100,d4
  235.     Bne    EndPosTab
  236.     Moveq.l    #0,d4
  237.     Addq.w    #1,d5
  238.     Cmp.w    #FrameHeight,d5
  239.     Bne    EndPosTab
  240.     Moveq.l    #0,d5
  241.     Lea    MorphFlag(pc),a6
  242.     And.b    #$fe,(a6)
  243.     Tst.b    (a6)
  244.     Beq    EndByteDraw
  245.     Move.l    FrameStart(pc),a0
  246. EndPosTab    Move.l    (a0)+,d7
  247.     Beq    DrawData
  248.     Moveq.l    #$1f,d6
  249. TestDrawBit    Btst    d6,d7
  250.     Beq    NoDrawByte
  251.     Move.w    d4,(a2)+
  252.     Move.w    d5,(a2)+
  253. NoDrawByte    Addq.w    #1,d4
  254.     Dbf    d6,TestDrawBit
  255.     Move.w    #$ffff,(a2)
  256.     Bra    GetFrame
  257.  
  258. CalcFrame1    Lea    MorphDatList+$82(pc),a3
  259.     Move.w    (a3),d4
  260.     Move.w    2(a3),d5
  261.     And.w    #$ffe0,d4
  262. DrawData1    Add.w    #$20,d4
  263.     Cmp.w    #$100,d4
  264.     Bne    EndPosTab2
  265.     Moveq.l    #0,d4
  266.     Addq.w    #1,d5
  267.     Cmp.w    #FrameHeight,d5
  268.     Bne    EndPosTab2
  269.     Moveq.l    #0,d5
  270.     Lea    MorphFlag(pc),a6
  271.     And.b    #$fd,(a6)
  272.     Tst.b    (a6)
  273.     Beq    EndByteDraw
  274.     Move.l    FrameEnd(pc),a1
  275. EndPosTab2    Move.l    (a1)+,d7
  276.     Beq    DrawData1
  277.     Moveq.l    #$1f,d6
  278. TestNextDraw    Btst    d6,d7
  279.     Beq    NoByteDraw
  280.     Move.w    d4,(a3)+
  281.     Move.w    d5,(a3)+
  282. NoByteDraw    Addq.w    #1,d4
  283.     Dbf    d6,TestNextDraw
  284.     Move.w    #$ffff,(a3)
  285.     Bra    GetHalfData 
  286. EndByteDraw    Rts    
  287.  
  288. KillSys    Bsr.s    SysWait    
  289.  
  290.     Move.l    $4,a6    
  291.     Lea    GFXName(pc),a1    
  292.     Moveq    #0,d0    
  293.     Jsr    -552(a6)    
  294.         
  295.     Lea    OldCop1(pc),a5
  296.     Move.l    $26(a0),$0(a5)    
  297.     Move.l    $32(a0),$4(a5)    
  298.     
  299.     Lea    HardWare,a6
  300.     Move.w    IntEnaR(a6),d0    
  301.     Move.w    DMAConR(a6),d1  
  302.     Or.w    #$8000,d0    
  303.     And.w    #$03ff,d1    
  304.     Or.w    #$8000,d1    
  305.     Move.w    d0,$8(a5)    
  306.     Move.w    d1,$a(a5)    
  307.     
  308.     Move.w    #$7fff,IntEna(a6) 
  309.     Move.w    #$7fff,DMACon(a6) 
  310.     Rts
  311.  
  312. SysWait    Move.w    #15,d7    
  313. SysWaitLoop    Move.l    #$05000,d1    
  314.     Bsr.s    WaitVBL    
  315.     Bsr.s    DoWaitVBL    
  316.     Dbf    d7,SysWaitLoop    
  317.     Rts
  318.  
  319. DoWaitVBL    Move.l    #$03000,d1    
  320. WaitVBL    Movem.l    d0-d1/a6,-(sp)    
  321.     Lea    HardWare,a6    
  322. WaitVBLLoop    Move.l    VPosR(a6),d0    
  323.     And.l    #$1ff00,d0    
  324.     Cmp.l    d1,d0    
  325.     Bne.s    WaitVBLLoop    
  326.     Movem.l    (sp)+,d0-d1/a6    
  327.     Rts        
  328.  
  329. ReturnSys    Lea    HardWare,a6    
  330.     Move.w    OldIntEna(pc),IntEna(a6)
  331.     Move.w    OldDMACon(pc),DMACon(a6)
  332.     Move.l    OldCop1(pc),Cop1lc(a6)
  333.     Move.l    OldCop2(pc),Cop2lc(a6)
  334.     Rts
  335.  
  336. GFXName    Dc.b    "graphics.library",0
  337.     Even
  338. OldCop1    Dc.l    0    
  339. OldCop2    Dc.l    0    
  340. OldIntEna    Dc.w    0    
  341. OldDmaCon    Dc.w    0    
  342.  
  343. MorphFlag    Dc.w    0
  344. FrameStart    Dc.l    Screen
  345. FrameList    
  346. A Set FrameSize
  347.     Rept    19
  348.     Dc.l    Screen+A
  349. A Set A+FrameSize
  350.     Endr
  351. FrameEnd    Dc.l    Screen+A
  352.  
  353. Cmv    Macro
  354.     Dc.w    \2,\1
  355.     EndM
  356.     
  357. Cwt    Macro
  358.     Dc.w    (\1*$100)+$01,$fffe
  359.     EndM    
  360.  
  361. Pal    Macro
  362.     Dc.w    $ffe1,$fffe
  363.     EndM    
  364.  
  365. EndCop    Macro
  366.     Dc.w    $ffff,$fffe
  367.     EndM    
  368.  
  369. CopperList    Cwt    $15    
  370.     Cmv    $0200,BplCon0    
  371.     Cmv    $00bb,BplCon1    
  372.     Cmv    $000a,BplCon2    
  373.     Cmv    $0040,DdfStrt    
  374.     Cmv    $00b8,DdfStop    
  375.     Cmv    $169e,DiwStrt    
  376.     Cmv    $36a3,DiwStop
  377.     Cmv    $0,BplMod1    
  378.     Cmv    $0,BplMod2    
  379.     
  380.     Cwt    $25        
  381. ColourZero    Cmv    $0000,Color00    
  382.     Cmv    $0fff,Color01
  383.     
  384. CopperBPLS    Cmv    $a,BplPt0h    
  385.     Cmv    $0,BplPt0l    
  386.     Cmv    $0,BplPt1h    
  387.     Cmv    $0,BplPt1l    
  388.     Cmv    $0,BplPt2h    
  389.     Cmv    $0,BplPt2l    
  390.     Cmv    $0,BplPt3h    
  391.     Cmv    $0,BplPt3l    
  392.     Cmv    $0,BplPt4h
  393.     Cmv    $0,BplPt4l 
  394.     
  395.     Cwt    $28    
  396.     Cmv    $1200,BplCon0    
  397.  
  398.     Cwt    $a7
  399.     Cmv    $0200,BplCon0    
  400.     
  401.     Pal
  402.     Cwt    $28    
  403.     Cmv    $0200,BplCon0
  404.                     
  405.     EndCop
  406.  
  407. MorphDatList    Incbin    df0:SysData/Morph3e60c.Dat
  408. PosTabList    Incbin    df0:SysData/PosTab.Dat
  409. MorphBitList    Incbin    df0:SysData/MorphBitTab.Dat
  410.  
  411. FirstPiccy    Incbin    df0:BitMaps/FirstFrame.Raw
  412.     Ds.b    $3000
  413. LastPiccy    Incbin    df0:BitMaps/LastFrame.Raw
  414.     Ds.b    $3000
  415.  
  416. ****Custom Chip Registers****
  417.  
  418. Hardware    = $Dff000
  419.  
  420. ;Control Registers
  421.  
  422. Dmaconr    = $002
  423. Vposr    = $004
  424. Vhposr    = $006
  425. Joy0dat    = $00A
  426. Joy1dat    = $00C
  427. Clxdat    = $00E
  428. Intenar    = $01C
  429. Intereqr    = $01E
  430. Copcon    = $02E
  431.  
  432. ;Blitter Registers
  433.  
  434. Bltcon0    = $040
  435. Bltcon1    = $042
  436. Bltafwm    = $044
  437. Bltalwm    = $046
  438. Bltcpth    = $048
  439. Bltcptl    = $04A
  440. Bltbpth    = $04C
  441. Bltbptl    = $04E
  442. Bltapth    = $050
  443. Bltaptl    = $052
  444. Bltdpth    = $054
  445. Bltdptl    = $056
  446. Bltsize    = $058
  447. Bltcmod    = $060
  448. Bltbmod    = $062
  449. Bltamod    = $064
  450. Bltdmod    = $066
  451. Bltcdat    = $070
  452. Bltbdat    = $072
  453. Bltadat    = $074
  454.  
  455. ;Copper Registers
  456.  
  457. Cop1lc    = $080
  458. Cop1lch    = $080
  459. Cop1lcl    = $082
  460. Cop2lc    = $084
  461. Cop2lch    = $084
  462. Cop2lcl    = $086
  463. Copjmp1    = $088
  464. Copjmp2    = $08A
  465. Diwstrt    = $08E
  466. Diwstop    = $090
  467. Ddfstrt    = $092
  468. Ddfstop    = $094
  469. Dmacon    = $096
  470. Clxcon    = $098
  471. Intena    = $09A
  472. Intreq    = $09C
  473.  
  474. ;BitPlane Registers 
  475.  
  476. BplCon0    = $100
  477. BplCon1    = $102
  478. BplCon2    = $104
  479. BplMod1    = $108
  480. BplMod2    = $10a
  481.  
  482. BplPt0h    = $0e0
  483. BplPt0l    = $0e2
  484. BplPt1h    = $0e4
  485. BplPt1l    = $0e6
  486. BplPt2h    = $0e8
  487. BplPt2l    = $0ea
  488. BplPt3h    = $0ec
  489. BplPt3l    = $0ee
  490. BplPt4h    = $0f0
  491. BplPt4l    = $0f2
  492. BplPt5h    = $0f4
  493. BplPt5l    = $0f6
  494.  
  495. ;Colour Registers
  496.  
  497. Color00    = $180
  498. Color01    = $182
  499. Color02    = $184
  500. Color03    = $186
  501. Color04    = $188
  502. Color05    = $18a
  503. Color06    = $18c
  504. Color07    = $18e
  505. Color08    = $190
  506. Color09    = $192
  507. Color10    = $194
  508. Color11    = $196
  509. Color12    = $198
  510. Color13     = $19a
  511. Color14     = $19c
  512. Color15     = $19e
  513. Color16     = $1a0
  514. Color17     = $1a2
  515. Color18     = $1a4
  516. Color19     = $1a6
  517. Color20     = $1a8
  518. Color21     = $1aa
  519. Color22     = $1ac
  520. Color23     = $1ae
  521. Color24     = $1b0
  522. Color25     = $1b2
  523. Color26     = $1b4
  524. Color27     = $1b6
  525. Color28     = $1b8
  526. Color29     = $1ba
  527. Color30     = $1bc
  528. Color31     = $1be
  529.  
  530. EcsNop    = $1fe
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.